package com.teacher.game.framework.util;

import com.teacher.game.model.PowerUp;

/**
 * PowerUp对象池 - 管理道具对象的重用
 * 减少道具创建和销毁的性能开销
 */
public class PowerUpPool extends ObjectPool<PowerUp> {
    
    private static PowerUpPool instance;
    
    /**
     * 私有构造函数，实现单例模式
     * @param maxPoolSize 最大池容量
     */
    private PowerUpPool(int maxPoolSize) {
        super(maxPoolSize);
    }
    
    /**
     * 获取PowerUp池单例实例
     * @return PowerUp池实例
     */
    public static PowerUpPool getInstance() {
        if (instance == null) {
            instance = new PowerUpPool(50); // 最多缓存50个PowerUp
            instance.preFill(10); // 预创建10个PowerUp
        }
        return instance;
    }
    
    /**
     * 创建新PowerUp对象（使用默认参数）
     * @return 新的PowerUp对象
     */
    @Override
    protected PowerUp createObject() {
        // 创建默认PowerUp（稍后会重新初始化）
        return new PowerUp(0, 0, PowerUp.TYPE_COIN);
    }
    
    /**
     * 重置PowerUp对象状态
     * @param powerUp 要重置的PowerUp
     */
    @Override
    protected void resetObject(PowerUp powerUp) {
        powerUp.reset();
    }
    
    /**
     * 创建并配置PowerUp
     * @param x X坐标
     * @param y Y坐标
     * @param type 道具类型
     * @return 配置好的PowerUp对象
     */
    public PowerUp createPowerUp(float x, float y, int type) {
        PowerUp powerUp = acquire();
        powerUp.reinitialize(x, y, type);
        return powerUp;
    }
    
    /**
     * 回收PowerUp（当PowerUp被收集或离开屏幕时调用）
     * @param powerUp 要回收的PowerUp
     */
    public void recyclePowerUp(PowerUp powerUp) {
        if (powerUp != null && (powerUp.isCollected() || powerUp.isOffScreen())) {
            release(powerUp);
        }
    }
}